package org.soderiakelvy.model.dao.imp;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Restrictions;
import org.soderiakelvy.model.dao.ComercializacionPackDao;
import org.soderiakelvy.model.domain.ComercializacionPackVO;
import org.soderiakelvy.model.domain.CondicionIvaVO;
import org.soderiakelvy.model.domain.ContribucionVO;
import org.soderiakelvy.model.domain.PackVO;
import org.soderiakelvy.model.domain.SucursalProductoVO;
import org.soderiakelvy.model.domain.SucursalVO;
import org.soderiakelvy.model.domain.SujetoVO;
import org.soderiakelvy.model.util.HibernateUtil;

public class ComercializacionPackDaoImp implements ComercializacionPackDao,Serializable {
	private static final long serialVersionUID = 6249086803347124997L;

	@Override
	public void insertComercializacionPackVO(			
			ComercializacionPackVO comercializacionPack) throws Exception {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
		Session session = sessionFactory.openSession();
		session.beginTransaction();
		session.save(comercializacionPack);
		session.getTransaction().commit();
		session.close();
	}

	@Override
	public void deleteComercializacionPackVO(
			ComercializacionPackVO comercializacionPack) throws Exception {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
		Session session = sessionFactory.openSession();
		session.beginTransaction();
		session.delete(comercializacionPack);
		session.getTransaction().commit();
		session.close();

	}

	@Override
	public void updateComercializacionPackVO(
			ComercializacionPackVO comercializacionPack) throws Exception {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
		Session session = sessionFactory.openSession();
		session.beginTransaction();
		session.update(comercializacionPack);
		session.getTransaction().commit();
		session.close();

	}

	@Override
	public ComercializacionPackVO getComercializacionBySujeto(SujetoVO sujeto)
			throws Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<ComercializacionPackVO> getComercializacionPackByPack(PackVO pack) {
		try {
			SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
			Session session = sessionFactory.openSession();
			Criteria criteria = session.createCriteria(ComercializacionPackVO.class);
			criteria.add(Restrictions.eq("pack", pack));
			List<ComercializacionPackVO> result = criteria.list();
			session.close();
			return result;	
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	@Override
	public List<ComercializacionPackVO> getComercializacionBySucursal(SucursalVO sucursal) throws Exception {
		Date fechaActual = new Date();
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
        Session session = sessionFactory.openSession();
        Criteria criteria = session.createCriteria(ComercializacionPackVO.class);
        criteria.add(Restrictions.eq("sucursal", sucursal));
        criteria.add(Restrictions.or(
                Restrictions.ge("fechaDesasignacion", fechaActual ),
                Restrictions.isNull("fechaDesasignacion")));

        List<ComercializacionPackVO> result = criteria.list();
        session.close();
        return result;		
	}	
}
